
package webui;
import OpenCodes.Dominio.Ciudad;
import OpenCodes.Servicios.Ciudad.CiudadServicio;

import OpenCodes.Servicios.ServicioException;
import OpenCodes.UI.IUsuarioInterfazCiudad;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.Alert;
import com.sun.rave.web.ui.component.Body;
import com.sun.rave.web.ui.component.Button;
import com.sun.rave.web.ui.component.Label;
import com.sun.rave.web.ui.component.Tab;
import com.sun.rave.web.ui.component.TabSet;
import com.sun.rave.web.ui.component.TextField;
import java.util.Collections;
import java.util.List;
import javax.faces.FacesException;
import javax.faces.component.html.HtmlDataTable;

/**
 * Administracion ciudades. permite alta, baja y eliminacion de ciudades.
 * @version AdministracionCiudad.java
 * @version Created on 03-may-2011, 17:48:38
 * @author OpenCodes
 */

public class AdministracionCiudad extends AbstractPageBean implements IUsuarioInterfazCiudad {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private CiudadServicio abmCiudadServicio;
    private List<Ciudad> listaCiudades;
    private Alert alerta = new Alert();
    private String mensajeError;
    public List<Ciudad> getListaCiudades() {
        return listaCiudades;
    }

    @Override
    public void setListaCiudades(List<Ciudad> listaCiudades) {
        this.listaCiudades = listaCiudades;
    }

    private void _init() throws Exception {
        if (this.isPostBack()){
           this.getSessionBean1().paginaAnterior="";
        }
    }

    public Alert getAlerta() {
        return alerta;
    }

    public void setAlerta(Alert a) {
        this.alerta = a;
    }
    private Button btnAgregar = new Button();

    public Button getBtnAgregar() {
        return btnAgregar;
    }

    public void setBtnAgregar(Button b) {
        this.btnAgregar = b;
    }
    private Button btnModificar = new Button();

    public Button getBtnModificar() {
        return btnModificar;
    }

    public void setBtnModificar(Button b) {
        this.btnModificar = b;
    }
    private Button btnEliminar = new Button();

    public Button getBtnEliminar() {
        return btnEliminar;
    }

    public void setBtnEliminar(Button b) {
        this.btnEliminar = b;
    }
    private HtmlDataTable tablaCiudades = new HtmlDataTable();

    public HtmlDataTable getTablaCiudades() {
        return tablaCiudades;
    }

    public void setTablaCiudades(HtmlDataTable hdt) {
        this.tablaCiudades = hdt;
    }
    private TabSet tabSetCiudades = new TabSet();

    public TabSet getTabSetCiudades() {
        return tabSetCiudades;
    }

    public void setTabSetCiudades(TabSet ts) {
        this.tabSetCiudades = ts;
    }
    private TextField tfNombre = new TextField();

    public TextField getTfNombre() {
        return tfNombre;
    }

    public void setTfNombre(TextField tf) {
        this.tfNombre = tf;
    }
    private Label lblIdCiudad = new Label();

    public Label getLblIdCiudad() {
        return lblIdCiudad;
    }

    public void setLblIdCiudad(Label l) {
        this.lblIdCiudad = l;
    }
    private Tab tabOperaciones = new Tab();

    public Tab getTabOperaciones() {
        return tabOperaciones;
    }

    public void setTabOperaciones(Tab t) {
        this.tabOperaciones = t;
    }
    private Body body = new Body();

    public Body getBody() {
        return body;
    }

    public void setBody(Body b) {
        this.body = b;
    }
    private TextField tfBuscarNombre = new TextField();

    public TextField getTfBuscarNombre() {
        return tfBuscarNombre;
    }

    public void setTfBuscarNombre(TextField tf) {
        this.tfBuscarNombre = tf;
    }
    private Button btnBuscar = new Button();

    public Button getBtnBuscar() {
        return btnBuscar;
    }

    public void setBtnBuscar(Button b) {
        this.btnBuscar = b;
    }


    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public AdministracionCiudad() {
        obtenerCiudades();
       
        if (alerta.getSummary() == null) {
            alerta.setVisible(false);
        } else {
            alerta.setVisible(true);
        }
    }

   
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        
        super.init();
        
       
        
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
      
        try {
            _init();
            
        } catch (Exception e) {
            log("AdministracionCiudad Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
      
    }

   
    @Override
    public void preprocess() {
       
    }

   
    @Override
    public void prerender() {
       
       // this.tabSetCiudades.setSelected("tabOperaciones");
    }

   
    @Override
    public void destroy() {
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     *
     * @return reference to the scoped data bean
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

     private void obtenerCiudades() {
        try {
            abmCiudadServicio = new CiudadServicio();
            abmCiudadServicio.init(this);
            abmCiudadServicio.listarTodas(this);
        } catch (ServicioException e) {
            //String mensajeError;
            mensajeError = e.toString();
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());
        }
    }

    @Override
    public int getIdCiudad() {
        try{
        Object id;
        id = lblIdCiudad.getText();
        //pregunto si valor del label Id.

        if (id == null) //si esta vacio entonces devuelvo 0 para agregar.
        {
            return 0;
        } else { //si no convierto el valor del label en entero.
            return Integer.valueOf(lblIdCiudad.getText().toString());
        }
        }catch(java.lang.NullPointerException nullExc){
            return 0;
        }
    }

    @Override
    public String getNombreCiudad() {
        
        Object nombre;
        nombre = tfNombre.getText();

        if (nombre == null) {
            return "";
        }
        return nombre.toString().toUpperCase(); // convierte a mayusculas
       
    }

    public String tabOperaciones_action() {
        alerta.setVisible(false);
        alerta.setSummary("");
        
        body.setFocus("form:tabSetCiudades:tabOperaciones:tfNombre");
        return null;
    }
    public String tabConsultar_action() {
        
        if(alerta.getType().equals("warning")){
             alerta.setSummary("");
        }
        body.setFocus("form:tabSetCiudades:tabConsultar:tfBuscarNombre");
        return null;
    }
    public String btnModificar_action() {
       
        modificarCiudad();

        return null;
    }

    public String btnEliminar_action() {
        
        eliminarCiudad();
        return null;
    }

    public void btnAgregar_action() {
       
       agregarCiudad();

    }
    // <editor-fold desc="PAGINACION Y ORDENACION">

     public void ordenarListaCiudades(String campo, boolean tipoOrden) {

        if (tipoOrden) { //si es ascendente

            //Ordeno la lista
            Collections.sort(listaCiudades, new CompararCiudad(campo, true));

        } else {

            //Ordeno la lista
            Collections.sort(listaCiudades, new CompararCiudad(campo, false));

        }
        //Actualizo tabla (cambio: ya no es necesario: leo desde la listaJugadores
        //(listaJugadores);
        //Establezco variables de sesion para no perder el ordenado en el postback

        getSessionBean1().sesTablaOrdenada = true;
        getSessionBean1().sesCampoOrden = campo;
    }
    public void ordenarListaPorNombre() {
        //Invierto el orden para siguinte ordenamiento
        // sesOrdenAscendente se usara en los click de la tabla en el tabConsulta.
        getSessionBean1().sesOrdenAscendente = !getSessionBean1().sesOrdenAscendente;
        ordenarListaCiudades("Nombre", getSessionBean1().sesOrdenAscendente);
    }
    public void pageFirst() {
        tablaCiudades.setFirst(0);
    }

    public void pagePrevious() {
        tablaCiudades.setFirst(tablaCiudades.getFirst() - tablaCiudades.getRows());
    }

    public void pageNext() {
        tablaCiudades.setFirst(tablaCiudades.getFirst() + tablaCiudades.getRows());
    }

    public void pageLast() {
        int count = tablaCiudades.getRowCount();
        int rows = tablaCiudades.getRows();
        tablaCiudades.setFirst(count - ((count % rows != 0) ? count % rows : rows));
    }

    public int getCurrentPage() {
        int rows = tablaCiudades.getRows();
        int first = tablaCiudades.getFirst();
        int count = tablaCiudades.getRowCount();
        return (count / rows) - ((count - first) / rows) + 1;
    }

    public int getTotalPages() {
        int rows = tablaCiudades.getRows();
        int count = tablaCiudades.getRowCount();
        return (count / rows) + ((count % rows != 0) ? 1 : 0);
    }
    // </editor-fold>

    // <editor-fold desc="VALIDACIONES">
    public boolean esEntero(String cadena) {

        try {
            int x = Integer.parseInt(cadena);
            return true;
        } catch (NumberFormatException a) {
            return false;
        }
    }
    public boolean validarBuscar() {
        Object buscarNombre;
        buscarNombre = tfBuscarNombre.getText();
        if (buscarNombre == null) {
            mensajeError = "Debe ingresar un nombre";
            body.setFocus("form:tabSetCiudades:tabConsultar:tfBuscarNombre");
            return false;
        }
       
        return true;
    }
    private boolean validarAgregar() {
        try {

            if (getNombreCiudad().isEmpty()) {
                body.setFocus("form:tabSetCiudades:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            if (esEntero(getNombreCiudad())) {
                body.setFocus("form:tabSetCiudades:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            return true;

        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }
    }

    private boolean validarModificar() {
       try {
           if (getIdCiudad()<=0){
                mensajeError = "La identificacion de la ciudad esta vacia";
                return false;
            }
            if (getNombreCiudad().isEmpty()) {
                body.setFocus("form:tabSetCiudades:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                 return false;
            }
            if (esEntero(getNombreCiudad())) {
                body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            return true;

        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }
    }
    private boolean validarEliminar() {
        try {
            if (getNombreCiudad().isEmpty()) {
                 body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            if (esEntero(getNombreCiudad())) {
                 body.setFocus("form:tabSetJugador:tabOperaciones:tfNombre");
                mensajeError = "Debe ingresar un nombre";
                return false;
            }
            return true;

        } catch (Exception e) {
            mensajeError = "Validacion incorrecta: " + e.getCause();
            return false;
        }
    }
    // </editor-fold>

    public void editarfilaTabla() {

        Ciudad c;
        c = (Ciudad) this.tablaCiudades.getRowData();
        String id;
        id = String.valueOf(c.getId());
        lblIdCiudad.setText(id);
        tfNombre.setText(c.getNombre());
        
        tabSetCiudades.setSelected("tabOperaciones");

    }
    private String agregarCiudad() {
       
        if (isPostBack()) {
            try {            
                boolean esValido;
                esValido = validarAgregar();
                if (esValido == false) {
                    alerta.setType("warning");
                    alerta.setVisible(true);
                    alerta.setSummary("Error:" + mensajeError);

                    return null;
                }
               
                abmCiudadServicio = new CiudadServicio();
                abmCiudadServicio.init(this);
              
                abmCiudadServicio.agregar(this);
                //accionLimpiar();
                obtenerCiudades();
                alerta.setType("success");
                alerta.setVisible(true);
                alerta.setSummary("Ciudad guardada con exito");
                tabSetCiudades.setSelected("tabConsultar");
                obtenerCiudades();
                return "OK";
            } catch (ServicioException e1) {
                mensajeError = "Error al agregar una ciudad: ";
                mensajeError = mensajeError.concat(e1.getMessage());
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary(mensajeError);
                return "Error: " + e1.getMessage();
            } catch (javax.faces.FacesException e2) {
                mensajeError = "Error al agregar una ciudad ";
                mensajeError = mensajeError.concat(e2.getCause().toString());
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary(mensajeError);
                return "Error: " + e2.toString();
            } catch (java.lang.Exception e3) {
                mensajeError = "Error al agregar una ciudad";
                mensajeError = mensajeError.concat(e3.getCause().toString());
                alerta.setType("warning");
                alerta.setSummary(mensajeError);
                return "Error";
            }
        } else {
            return null;
        }
    }
    private String modificarCiudad() {
       
        if (isPostBack()) {
            try {
                
                boolean esValido = true;
                esValido = validarModificar();
                if (esValido == false) {
                    alerta.setType("warning");
                    alerta.setVisible(true);
                    alerta.setSummary("Error: " + mensajeError);
                    return "Error";
                }
                abmCiudadServicio = new CiudadServicio();
                abmCiudadServicio.init(this);
                abmCiudadServicio.modificar(this);
                alerta.setVisible(true);
                alerta.setType("success");
                alerta.setSummary("Modificacion guardada con exito");
                
                //accionLimpiar();
                tabSetCiudades.setSelected("tabConsultar");

                obtenerCiudades();
                return "OK";
            } //Servicio Exception lanzado por el servicio
            catch (ServicioException e1) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e1.getMessage());

                return "Error: " + e1.getMessage();
            } catch (javax.faces.FacesException e2) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e2.getMessage());
                return "Error: " + e2.getMessage();
            } catch (Exception ex4) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + ex4.getMessage());
                return "Error: " + ex4.getMessage();
            }
        } else {
            return null;
        }

    }
    private String eliminarCiudad() {
         if (isPostBack()) {
            try {
                
                boolean esValido = true;
                esValido = validarEliminar();
                if (esValido == false) {
                    alerta.setType("warning");
                    alerta.setVisible(true);
                    alerta.setSummary("Error: " + mensajeError);
                    return "Error";
                }
                 
                abmCiudadServicio = new CiudadServicio();
                abmCiudadServicio.init(this);

                abmCiudadServicio.eliminar(this);
                //accionLimpiar();
                alerta.setVisible(true);
                alerta.setType("success");
                alerta.setSummary("Eliminacion exitosa");
                obtenerCiudades();
                tabSetCiudades.setSelected("tabConsultar");
                return "OK";
            } //Servicio Exception lanzado por el servicio
            catch (ServicioException e1) {
                alerta.setType("warning");
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e1.getMessage());

                return "Error: " + e1.getMessage();
            } catch (javax.faces.FacesException e2) {
                alerta.setVisible(true);
                alerta.setSummary("Error: " + e2.getMessage());
                return "Error: " + e2.getMessage();
            } catch (Exception ex4) {
                alerta.setVisible(true);
                alerta.setSummary("Error: " + ex4.getMessage());
                return "Error: " + ex4.getMessage();
            }
        } else {
            return null;
        }
    }

    public String btnBuscar_action() {
         try {
            //Si es valido tfBuscarNombre y tfBuscarApellido
            if (validarBuscar()) {
                String nombre = tfBuscarNombre.getText().toString();
               
                abmCiudadServicio = new CiudadServicio();
                abmCiudadServicio.init(this);
                abmCiudadServicio.listarAlgunos(this, nombre);
                //Pregunta por ordenamiento
                if (getSessionBean1().sesTablaOrdenada) {
                    /*  Leo el campoOrden de la sesion y ordeno.
                     *  El tipo de ordenamiento (Ascendete o descendente) ya esta
                     *  cargado en la sesion.*/
                    ordenarListaCiudades(getSessionBean1().sesCampoOrden, getSessionBean1().sesOrdenAscendente);

                }
           
            } else {

                
                alerta.setVisible(true);
                alerta.setSummary("Error:" + mensajeError);

            //return "alert('Error: " + mensajeError + " (1)');";
            }
        } catch (ServicioException e) {
            mensajeError = e.toString();
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e.getMessage());

        //return "alert('Error: " + mensajeError + " (2)');";

        } catch (javax.faces.FacesException e2) {
            alerta.setVisible(true);
            alerta.setSummary("Error: " + e2.getMessage());

        //return "alert('Error: " + mensajeError + " (3)');";
        }
        return null;
    }
}

